工控网首页
>

应用设计

>

利用泓格产品进行高山无人监控站的系统设计与开发

利用泓格产品进行高山无人监控站的系统设计与开发

1 应用背景 本系统用来监控杭州、温州、宁波等城市的微波站,主控站在城市机房,受控站则在内地或海边的山顶,环境比较恶劣。共有6个主控站,每个主控站带1个受控站,采用总线型的主控机和受控机两级结构,通过微波信道(图1粗黑线所示)在主控机之间传送数据,但在某一时刻只有一台主控机Polling所属受控机,被Polling受控机作应答处理,其余主控机处于侦听(Listen)状态。主控机Polling完所属受控机后,转移Polling权,由下一台主控机接管Polling权……如此循环。监控内容主要包括柴油发电机、开关电源、市电、蓄电池等的工作状态、环境温度、湿度、防盗等。系统结构如图1所示。
2 硬件设计 油机监控器是与大型柴油发电机配套的专用监控器,采用双机热备;1600与2800也是与原设备配套的专用监控器,其中1600主要用来监控市电和环境参数,2800对两组蓄电池(各12节)进行监控;报警开关量(遥信)输入模块采用7041,控制开关量(遥控)采用7067模块,受控机的主控模块则选用7188。7188有四个串行口,其中两个RS232(仅含Rx、Tx、GND信号线),一个RS485,一个9针全信号RS232口(通过内部跳线,可将此口改变为RS485口)。7188模块接口多,抗恶劣环境,同时,提供丰富的内部函数,有利于快速开发出性能可靠的下位机监控系统程序。受控站系统的硬件结构见图2所示。由于各监控模块均使用RS485接口,所以需要两个RS232/RS485转换接口。COM1口为全信号RS232,连接专用Modem,从而进入微波信道进行数据的传输。主控站通过RS232接口与专用Modem连接,进入微波信道。
3 软件实现 3.1 主控机部分 主控机部分采用组态王5.1来实现。该系统可运行于Win98/NT平台,真正32位程序,实时多任务、多线程,采样速度快,可靠性高,同时,支持分布式历史数据库及拨号网络,具有丰富的ActiveX控件,广泛应用于钢铁、化工、环保、国防、航空航天等重大领域。 利用组态王开发实时计算机监控系统方便快捷。首先,定义设备,加载通讯驱动程序。如对于本系统,是利用RS232接口来与受控机通讯的,其定义设备时选取的顺序如下:智能模块—I-7000系列—I-7188—Modbus RTU Extention。然后,再规定RS232的工作参数。其次,定义数据词典,规定变量名、数据类型、寄存器之间的关系。数据词典中的变量可以根据原始数值自动计算所对应的线性目标值。最后,根据组态王提供的图元控件设计用户界面,无论是字符串还是图元,均可建立“动画链接”,从而,将数据变量和数据的显示结合起来。数据显示包括两种形式,一是数据的文本格式的显示,二是数据的动画表示,如对于报警量,正常显示绿灯,报警显示红灯等。如此三步,主控机软件开发基本完工。 3.2 受控机部分 3.2.1 受控机主程序设计 7188提供了丰富而方便的库函数,其中包括关键的看门狗、相关的数据发送和接收函数、时钟中断函数等等,同时,还提供了丰富的例程,因而,使得受控机软件逻辑简捷,开发极其迅速可靠,与其它厂家的模块也能极其友好地连接。7188的一个串口控制两台智能设备,这是通过地址来区分的。对于泓格产品的7000系列模块,其工作参数及模块地址是可调的,可在系统组装之前对其进行设置。而其它智能模块的工作参数和地址则是由厂家设定的,不可更改。 由于7188内嵌基本的DOS环境,因而,采用TC2.0来编写受控机程序。主程序首先初始化系统,包括对各串口的初始化及系统运行参数的初始化,并安装用户时钟中断。由于该用户中断固定为1ms,因而,在中断程序中应避免接收和发送数据,因为监控系统中的波特率一般不超过9600(太高可能导致数据传输的不可靠),而对于9600的波特率,传输1个字节的数据大约需要1ms,一般情况下,所选择的波特率低于9600,而且,一次发送和接收的数据一般超过2个字节,因而,会引起DOS重入,从而使系统不可靠。所以,时钟中断程序应尽量简捷,主要完成各个工作节拍之间的协调问题,主要工作在主程序中进行,即轮询时间或节拍到,即向智能模块或设备发送查询命令,而当有数据返回时,再去读取数据并处理。其软件系统框图如图3所示。
3.2.2 通讯问题及解决方案 对于计算机监控系统,最关键的问题是数据通讯的可靠性。泓格产品的I/O设备数据传输平稳,能与7188可靠地连接,但其它厂家模块的数据传输并不象所想象的那么连续,因而,应该根据所接收的数据的不连续性作相应的等待,时间太短,数据将可能丢失,时间太长,则可能造成死机或将下一批的数据也一块接收进来。数据接收程序见算法1中的ReadDataDelay子程序。经过反复调试,对于本系统,发现延时数据大于0x0140即可,小于0x0130则数据错误率达1/4左右,并且,主要是每次丢失1~2个字节的数据。0x0130与0x0140之间为临界值。数据发送也用一个统一的子程序来完成,见算法1中的SendData子程序,数组中第一个字节用来存放收到的字节数,其后为数据内容。以下算法对嵌入式模块的程序设计具有通用性,其基本原理可以广泛使用。 /****************************************************/ /* ReadDataDelay:读取串口nPort中的数据,放入 */ /* bData中,nDealy为需要等待的节拍数 */ /****************************************************/ void ReadDataDelay(int nPort, unsigned char *bData, int nDelay) { int nData=0; /*接收到的字节数*/ int iCount=0; /*等待计时*/ while(iCount < nDelay) { if(IsCom(nPort)==QueueIsNotEmpty) /*nPort口有数据*/ { nData++; bData[nData] = ReadCom(nPort); /*读取一个字节的数据*/ iCount = 0; /*有数据,计时清零*/ } else iCount++; /*没有数据,则等待计时*/ } /*bData数据中第一个字节地址存放收到的字节数,其余为字节内容*/ bData[0] = nData; ClearCom(nPort); /*清除串口数据内容,为下次数据接收作准备*/ } /*********************************************************/ /* SendData:nPort为串口号,ComData为需要发送的数据 */ /*********************************************************/ void SendData(int nPort, unsigned char *ComData) { int nlength, i; nlength = ComData[0]; if(2 == nPort) Set485DirToTransmit(nPort); for(i=0; i测试软件”,专门用来通过RS232或RS485测试监控系统或相应的智能设备 [1] 。该软件既能充当受控机用来测试主控机程序,又能充当主控机用来测试受控机程序,并在多个监控系统中得到验证。在测试过程中发现,7000系列的模块数据传输平稳,并且,连续测试48小时(5秒测试1次),非泓格产品的监控器平均发生25次数据传输错误,而对于7000系列的模块却没有一次错误记录;用该测试软件模拟受控机对主控机(组态软件)进行测试,也没有错误记录。目前,该系统已经在实验室调试通过,效果良好。由于采用了泓格产品的组态软件及7000系列的模块,该系统开发迅速,性能可靠,因而,极有推广价值(onspring@sina.com)。 参考文献∶ [1] 马玉春, 宋瀚涛. 串行通讯协议的研究与应用. 计算机应用研究, 2004.4, p228
投诉建议

提交

查看更多评论
其他资讯

查看更多

泓格无线网关新品发布:RMV-762D-MTCP

泓格微型隔离型转换器新品发布:tM-7520A

泓格网络型 I/O 模块新品发布:PET-7066

泓格热电偶数据记录模块新品发布:TCD-104, TCD-108

泓格GbE PoE(PSE) 网络交换机新品发布:NSM-208GP